CodeDeployエージェントが出力するログをCloudWatch Agentを利用してCloudWatch Logsに転送してみた
こんにちは、坂巻です。
CodeDeployエージェントが出力するログは複数あります。
どういったログが出力されるのか纏めてみました。また、CloudWatch Agentを使用してCloudWatch Logsにログを転送してみましたので、そちらの設定についても触れたいと思います。
CodeDeployエージェントが出力するログ
codedeploy-agent.log
エージェントの正常性や、デプロイ全体のステータスに関する情報が含まれます。ログは/var/log/aws/codedeploy-agent/codedeploy-agent.log
に出力されます。
ログ出力例
2019-04-24 12:43:55 INFO [codedeploy-agent(12057)]: master 12057: Spawned child 1/1 2019-04-24 12:43:55 INFO [codedeploy-agent(12061)]: On Premises config file does not exist or not readable 2019-04-24 12:43:55 INFO [codedeploy-agent(12061)]: InstanceAgent::Plugins::CodeDeployPlugin::CommandExecutor: Archives to retain is: 5} 2019-04-24 12:43:55 INFO [codedeploy-agent(12061)]: Version file found in /opt/codedeploy-agent/.version with agent version OFFICIAL_1.0-1.1597_rpm. 2019-04-24 12:43:56 INFO [codedeploy-agent(12057)]: Started master 12057 with 1 children
Amazon Linuxの場合、デバッグレベルのメッセージはデフォルトで無効化されています。デバッグレベルのメッセージを表示させる場合は、設定ファイル/etc/codedeploy-agent/conf/codedeployagent.yml
の修正が必要になります。
codedeploy-agent-deployments.log
標準出力、標準エラー出力および、デプロイ中に実行させたスクリプトの情報等が含まれます。ログは/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log
に出力されます。deployment-root
ディレクトリは、デプロイ実施以降に作成されますので、デプロイ実施前にログは存在しません。
ログ出力例
# Logfile created on 2019-04-24 14:39:59 +0000 by logger.rb/41954 [2019-04-24 14:39:59.646] [d-0CTRSSXQY]LifecycleEvent - ApplicationStart [2019-04-24 14:39:59.646] [d-0CTRSSXQY]Script - scripts/test.sh [2019-04-24 14:39:59.665] [d-0CTRSSXQY][stdout]Dokupepa
scripts.log
AppSpecの「hooks」セクションにて、スクリプトを設定した際に作成されます。ログは/opt/codedeploy-agent/deployment-root/[deployment-group-ID]/[deployment-ID]/logs/scripts.log
に出力されます。上記deployment-group-ID
、deployment-ID
については、環境固有の値が設定されます。
2019-04-24 14:39:59 LifecycleEvent - ApplicationStart 2019-04-24 14:39:59 Script - scripts/test.sh 2019-04-24 14:39:59 [stdout]Dokupepa
codedeploy-agent.wire.log
デプロイに関連するアクティビティだけでなく、S3アクティビティに関する情報が含まれます。デフォルトでは無効化されています。有効化すると/var/log/aws/codedeploy-agent/codedeploy-agent.aws_wire.log
に出力されます。ログは非常に大きなサイズになる場合がありますので、必要な場合のみ有効化しましょう。
ログ出力例
-> "HTTP/1.1 200 OK\r\n" -> "x-amzn-RequestId: 00371900-6692-11e9-b0a4-3d694a5a8a3a\r\n" -> "Content-Type: application/x-amz-json-1.1\r\n" -> "Content-Length: 2\r\n" -> "\r\n" reading 2 bytes... -> "" -> "{}" read 2 bytes Conn keep-alive I, [2019-04-24T13:09:06.950012 #12704] INFO -- : [Aws::CodeDeployCommand::Client 200 60.33106 0 retries] poll_host_command(host_identifier:"arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:instance/i-0764dc8b1576642a9") opening connection to codedeploy-commands.ap-northeast-1.amazonaws.com:443... opened starting SSL for codedeploy-commands.ap-northeast-1.amazonaws.com:443... SSL established <- "POST / HTTP/1.1\r\nContent-Type: application/x-amz-json-1.1\r\nAccept-Encoding: \r\nUser-Agent: aws-sdk-ruby2/2.10.104 ruby/2.0.0 x86_64-linux\r\nX-Amz-Target: CodeDeployCommandService_v20141006.PollHostCommand\r\nX-Amz-Codedeploy-Agent-Version: OFFICIAL_1.0-1.1597_rpm\r\nX-Amz-Date: 20190424T130907Z\r\nHost: codedeploy-commands.ap-northeast-1.amazonaws.com\r\nX-Amz-Security-Token: AgoJb3JpZ2luX2VjEP3//////////wEaDmFwLW5vcnRoZWFzdC0xIkYwRAIgXkJfCIo9MAbFeRK1YFkREJMSfAW1Dl0zsbkDlgtT85QCIAlo75fCrBpHLjFwtZQR94xOtRWEz2w3Tx/i3r880OGnKu0DCNb//////////wEQARoMMzkyMTM4Nzg5NzY0IgwJlvmvk5FNQk7dZWYqwQPKTU8vYcFsYo0YDU7GEFiDaFV+cbitgv7KUCkImugpmwaa3YFe1i9IWRji8S8t23vZkZ+qKpPMGJXptQfFwlevmqdvc+yLGDj71GCQhRZO3CDXzpZV9Pg8sxglkp5u0XeUqV4FbSMfU4LuwgRgemIj7rO1cMh0Vf0oFlzaDj1Bf/e4nSeK1WsexTiP6Qk39S19CF5QcplEXDghe7nzwJsWR/ClzDAWEvLP3ga+eSeomtb2AaeXfPZGTSuFd71u3xjlCqPX04MZKyo06WFWhjuo/BpSBSfmW3WRP8EssBq8eogIkHP1D4LRnQBavJceKntDrkk6Qw/l4tokcK69DMdqiKrMTNG3xrckILIjzeyaazci0TgE3Nt192wKu3Je3OPci01LW3yXYkdDfvQf4qxnhkNw1dLoK//UKiEAiQEJPKJiHtUsM/5YPlU3FCfdioWTR3J4BWZyI4cx3sFZnn937GUgkh9BQTlyHCi/zbTSHyzDial6LfPs0FM6TC+Tq4SPrMEXvb2ZjJ/mLG95egi2EwKof945HtrZta3yZJugLUIAhTA0c6bCZtZjfPWRunztCHHZU7gZ+EpWe8s5hAFytjD1soHmBTq1AZIo7OobdRzrWq82w0Kp9Ps+L6P8N8DBsl6+vVVGTP+ZU+U4YyOYkGP1W8tl89mAk3EM69Cg0RcorEPnQ8KgkoUMbFRAATTYDg3mP0mdSY4QhAVsz1421VshqhOTAosneBxoJNJbAY3vXS6cLU8MamBd8GXh/STodZatH4X+mXeK3lTesFcptMifc6nxY18Gc7LOc7plDHohQgOVfQqyi7RaNRTYmJOh0NEsbBLbm+jGTXUhKzg=\r\nX-Amz-Content-Sha256: d1f12f5af88206f63a4756bdad725c4f0aa1ce0e073f7eedeb2c9764b62708f9\r\nAuthorization: AWS4-HMAC-SHA256 Credential=ASIAVWTKLCOCOIOFTPKG/20190424/ap-northeast-1/codedeploy-commands/aws4_request, SignedHeaders=content-type;host;x-amz-codedeploy-agent-version;x-amz-content-sha256;x-amz-date;x-amz-security-token;x-amz-target, Signature=aed5d31c9163bdda5557124ab5481cf2eeacd6ef3e46f23f5091073a77ac7aee\r\nContent-Length: 89\r\nAccept: */*\r\n\r\n"
update.log
CodeDeployエージェントのインストールや、アップデートの情報が含まれます。ログは/tmp/codedeploy-agent.update.log
に出力されます。
ログ出力例
I, [2019-04-24T12:43:52.778471 #11980] INFO -- : Starting Ruby version check. I, [2019-04-24T12:43:52.778670 #11980] INFO -- : Starting update check. I, [2019-04-24T12:43:52.778756 #11980] INFO -- : Attempting to automatically detect supported package manager type for system... I, [2019-04-24T12:43:52.786526 #11980] INFO -- : Checking AWS_REGION environment variable for region information... I, [2019-04-24T12:43:52.786586 #11980] INFO -- : Checking EC2 metadata service for region information... I, [2019-04-24T12:43:52.830642 #11980] INFO -- : Downloading version file from bucket aws-codedeploy-ap-northeast-1 and key latest/VERSION... I, [2019-04-24T12:43:52.873046 #11980] INFO -- : Downloading version file from bucket aws-codedeploy-ap-northeast-1 and key latest/VERSION... I, [2019-04-24T12:43:52.910706 #11980] INFO -- : Downloading package from bucket aws-codedeploy-ap-northeast-1 and key releases/codedeploy-agent-1.0-1.1597.noarch.rpm... I, [2019-04-24T12:43:53.056980 #11980] INFO -- : Executing `/usr/bin/yum -y localinstall /tmp/codedeploy-agent-1.0-1.1597.noarch.tmp-20190424-11980-1a6pebn.rpm`... I, [2019-04-24T12:43:55.494367 #11980] INFO -- : Update check complete. I, [2019-04-24T12:43:55.494443 #11980] INFO -- : Stopping updater.
CloudWatch Logsへの転送
環境構築手順については割愛します。今回は以下の環境を利用しました。
CloudWatchAgent設定
CloudWatch Logsに転送するために、CloudWatchAgentの設定が必要です。ここではパラメータストアを利用して設定しました。転送するログは、codedeploy-agent.log
、codedeploy-agent-deployments.log
、scripts.log
としています。以下設定をパラメータストアに格納します。
{ "agent": { "metrics_collection_interval": 10, "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/opt/codedeploy-agent/deployment-root/deployment-logs/codedeploy-agent-deployments.log", "log_group_name": "codedeploy-agent-deployments.log" }, { "file_path": "/var/log/aws/codedeploy-agent/codedeploy-agent.log", "log_group_name": "codedeploy-agent.log" }, { "file_path": "/opt/codedeploy-agent/deployment-root/*/*/logs/scripts.log", "log_group_name": "scripts.log" } ] } } } }
scripts.log
の格納ディレクトリは、ディレクトリ名にデプロイID(deployment-ID)を含みます。設定時にディレクトリ名は明らかになりませんので、ワイルドカードを使用しています。logsセクションの詳細については、以下をご確認ください。
CloudWatch Logs確認
CloudWatch Logsへの転送を確認するために、デプロイを実施しました。
デプロイ実施後にCloudWatch Logsを確認すると、設定どおりのログが出力されていました。
codedeploy-agent-deployments.log
codedeploy-agent.log
scripts.log
さいごに
デプロイでエラーが発生した際、マネジメントコンソールに表示されるエラーだけではトレースが難しいかと思います。また、ログ確認のために都度サーバにログインしては、運用等の負荷につながります。CodeDeployを利用する際は、CloudWatch Logs等で集中的にモニタリングすることをお勧します。